/*
 * Copyright (c) 2015-present, Facebook, Inc.
 * All rights reserved.
 *
 * This source code is licensed under the BSD-style license found in the
 * LICENSE file in the root directory of this source tree. An additional grant
 * of patent rights can be found in the PATENTS file in the same directory.
 */

package com.facebook.common.memory;

/**
 * Types of memory trim.
 * <p/>
 * <p>Each type of trim will provide a suggested trim ratio.
 * <p/>
 * <p>A {@link MemoryTrimmableRegistry} implementation sends out memory trim events with this type.
 */
public enum MemoryTrimType {

    /**
     * The application is approaching the device-specific Java heap limit.
     */
    OnCloseToDalvikHeapLimit(0.5),

    /**
     * The system as a whole is running out of memory, and this application is in the foreground.
     */
    OnSystemLowMemoryWhileAppInForeground(0.5),

    /**
     * The system as a whole is running out of memory, and this application is in the background.
     */
    OnSystemLowMemoryWhileAppInBackground(1),

    /**
     * This app is moving into the background, usually because the user navigated to another app.
     */
    OnAppBackgrounded(1);

    private double mSuggestedTrimRatio;

    private MemoryTrimType(double suggestedTrimRatio) {
        mSuggestedTrimRatio = suggestedTrimRatio;
    }

    /**
     * Get the recommended percentage by which to trim the cache on receiving this event.
     */
    public double getSuggestedTrimRatio() {
        return mSuggestedTrimRatio;
    }
}
